import { DeviceVaribaleStatusEnum } from '@/enums/iot/deviceVaribaleStatusEnum';
import { ReadWriteTypeEnum } from '@/enums/iot/readWriteTypeEnum';
import { DeviceTypeEnum } from '@/enums/iot/deviceTypeEnum';
import { ValueTypeEnum } from '@/enums/iot/valueTypeEnum';
import { EndianFormatEnum } from '@/enums/iot/endianFormatEnum';
import { ReadWritePermissionEnum } from '@/enums/iot/readWritePermissionEnum';
import { DeviceAlarmStatusEnum } from '@/enums/iot/deviceAlarmStatusEnum';

/** 输入DTO：设备组 */
export interface DeviceGroupInputDto {
  /** 编号 */
  Id: string | bigint;

  /** 设备组名称 */
  Name: string;
  /** 设备组描述 */
  Description: string;
  /** 备注 */
  Remark: string;

  /** 顺序编号 */
  OrderNo: number;

  /** 父级编号 */
  ParentId?: string | bigint | null;
}
/** 输出DTO：设备组 */
export interface DeviceGroupOutputDto extends DeviceGroupInputDto {
  /** 节点树形路径 */
  TreePathString: string;

  /** 创建者编号 */
  CreatorId: string | bigint | null | undefined;
  /** 创建者名称 */
  CreatorName: string;
  /** 创建者昵称 */
  CreatorNickname: string;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId: string | bigint | null | undefined;
  /** 更新者名称 */
  UpdaterName: string;
  /** 更新者昵称 */
  UpdaterNickname: string;
  /** 更新时间 */
  UpdatedTime?: Date | null;
}

/** 设备组节点 */
export interface DeviceGroupNode {
  /** 编号 */
  Id: string | bigint;

  /** 设备组名称 */
  Name: string;
  /** 设备组描述 */
  Description: string;
  /** 备注 */
  Remark: string;

  /** 顺序编号 */
  OrderNo: number;
  /** 节点树形路径 */
  TreePathString: string;
  /** 父级编号 */
  ParentId?: string | bigint | null;

  /** 创建者编号 */
  CreatorId: string | bigint | null | undefined;
  /** 创建者名称 */
  CreatorName: string;
  /** 创建者昵称 */
  CreatorNickname: string;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId: string | bigint | null | undefined;
  /** 更新者名称 */
  UpdaterName: string;
  /** 更新者昵称 */
  UpdaterNickname: string;
  /** 更新时间 */
  UpdatedTime?: Date | null;

  /** 层级 */
  Level: number;
}
/** 设备组树形节点 */
export interface DeviceGroupTreeNode extends DeviceGroupNode {
  /** 是否有子项 */
  HasChildren: boolean;
  /** 子项集合 */
  Items: DeviceGroupTreeNode[];
}

/** 设备节点 */
export interface DeviceNode {
  /** 编号 */
  Id: string | bigint;

  /** 设备名称 */
  Name: string;
  /** 设备描述 */
  Description: string;
  /** 启用 */
  Enabled: boolean;
  /** 变化上传 */
  UpdWhnChg: boolean;
  /** 执行周期(毫秒) */
  EnforcePeriod: number;
  /** 指令周期(毫秒) */
  CmdPeriod: number;

  /** 顺序编号 */
  OrderNo: number;

  /** 设备组编号 */
  DvcGrpId?: string | bigint | null;
  /** 设备组名称 */
  DvcGrpName: string;
  /** 驱动编号 */
  DriverId?: string | bigint | null;
  /** 驱动名称 */
  DriverName: string;

  /** 备注 */
  Remark: string;

  /** 创建者编号 */
  CreatorId: string | bigint | null | undefined;
  /** 创建者名称 */
  CreatorName: string;
  /** 创建者昵称 */
  CreatorNickname: string;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId: string | bigint | null | undefined;
  /** 更新者名称 */
  UpdaterName: string;
  /** 更新者昵称 */
  UpdaterNickname: string;
  /** 更新时间 */
  UpdatedTime?: Date | null;

  /** 是否已连接 */
  Connected: boolean;
}
/** 设备树形节点 */
export interface DeviceTreeNode extends DeviceNode {
  /** 设备类型 */
  DeviceType: DeviceTypeEnum;

  /** 是否有子项 */
  HasChildren: boolean;
  /** 子项集合 */
  Items: DeviceTreeNode[];
}

/** 简单输入DTO：设备 */
export interface DeviceInputDtoSimple {
  /** 编号 */
  Id: string | bigint;

  /** 设备名称 */
  Name: string;
  /** 设备描述 */
  Description: string;
  /** 启用 */
  Enabled: boolean;
  /** 变化上传 */
  UpdWhnChg: boolean;
  /** 执行周期(毫秒) */
  EnforcePeriod: number;
  /** 指令周期(毫秒) */
  CmdPeriod: number;

  /** 顺序编号 */
  OrderNo: number;

  /** 设备组编号 */
  DvcGrpId?: string | bigint | null;
  /** 驱动编号 */
  DriverId?: string | bigint | null;

  /** 备注 */
  Remark: string;
}
/** 输入DTO：设备 */
export interface DeviceInputDto extends DeviceInputDtoSimple {
  /** 配置集合 */
  Configs: DeviceConfigInputDto[];
  /** 变量集合 */
  Variables: DeviceVariableInputDto[];
}

/** 简单输出DTO：设备 */
export interface DeviceOutputDtoSimple extends DeviceInputDtoSimple {
  /** 设备组名称 */
  DvcGrpName: string;
  /** 驱动名称 */
  DriverName: string;

  /** 创建者编号 */
  CreatorId: string | bigint | null | undefined;
  /** 创建者名称 */
  CreatorName: string;
  /** 创建者昵称 */
  CreatorNickname: string;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId: string | bigint | null | undefined;
  /** 更新者名称 */
  UpdaterName: string;
  /** 更新者昵称 */
  UpdaterNickname: string;
  /** 更新时间 */
  UpdatedTime?: Date | null;
}
/** 输出DTO：设备 */
export interface DeviceOutputDto extends DeviceOutputDtoSimple {
  /** 配置集合 */
  Configs: DeviceConfigOutputDto[];
  /** 变量集合 */
  Variables: DeviceVariableOutputDto[];
}

/** 输入DTO：设备配置 */
export interface DeviceConfigInputDto {
  /** 编号 */
  Id: string | bigint;

  /** 设备编号 */
  DeviceId: string | bigint;
  /** 设备名称 */
  DeviceName: string;

  /** 配置名称 */
  Name: string;
  /** 配置描述 */
  Description: string;
  /** 配置值 */
  Value: string;
  /** 有效值 */
  ValidValues: { [key: string]: string };

  /** 顺序编号 */
  OrderNo: number;

  /** 备注 */
  Remark: string;
}
/** 输出DTO：设备配置 */
export interface DeviceConfigOutputDto extends DeviceConfigInputDto {
  /** 创建者编号 */
  CreatorId: string | bigint | null | undefined;
  /** 创建者名称 */
  CreatorName: string;
  /** 创建者昵称 */
  CreatorNickname: string;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId: string | bigint | null | undefined;
  /** 更新者名称 */
  UpdaterName: string;
  /** 更新者昵称 */
  UpdaterNickname: string;
  /** 更新时间 */
  UpdatedTime?: Date | null;
}

/** 输入DTO：设备变量 */
export interface DeviceVariableInputDto {
  /** 编号 */
  Id: string | bigint;

  /** 设备编号 */
  DeviceId: string | bigint;
  /** 设备名称 */
  DeviceName: string;

  /** 变量名称 */
  Name: string;
  /** 变量描述 */
  Description: string;

  /** 读取方法 */
  ReadMethod: string;
  /** 读取地址 */
  ReadAddress: string;
  /** 写入方法 */
  WriteMethod: string;
  /** 写入地址 */
  WriteAddress: string;
  /** 值类型 */
  ValueType: ValueTypeEnum;
  /** 常态值
   * 范围值(1-31)：((0?[1-9])|((1|2)[0-9])|30|31)
   * 离散值(A、12、B)：(A|12|B)
   */
  ValueNormal: string;
  /** 字节序 */
  Endian: EndianFormatEnum;
  /** 表达式 */
  Expression: string;

  /** 上传数据 */
  Upload: boolean;
  /** 权限类型 */
  PermissionType: ReadWritePermissionEnum;

  /** 顺序编号 */
  OrderNo: number;

  /** 备注 */
  Remark: string;
}
/** 输出DTO：设备变量 */
export interface DeviceVariableOutputDto extends DeviceVariableInputDto {
  /** 状态 */
  Status: DeviceVaribaleStatusEnum;
  /** 消息 */
  Message: string;
  /** 值 */
  Value: any;
  /** 熟化值 */
  CookedValue: any;
  /** 时间戳 */
  Timestamp: Date;
  /** 警报状态 */
  AlarmStatus: DeviceAlarmStatusEnum;

  /** 创建者编号 */
  CreatorId: string | bigint | null | undefined;
  /** 创建者名称 */
  CreatorName: string;
  /** 创建者昵称 */
  CreatorNickname: string;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId: string | bigint | null | undefined;
  /** 更新者名称 */
  UpdaterName: string;
  /** 更新者昵称 */
  UpdaterNickname: string;
  /** 更新时间 */
  UpdatedTime?: Date | null;
}

/** 驱动方法DTO */
export interface DriverMethodDto {
  /** 方法 */
  Method: string;
  /** 名称 */
  Name: string;
  /** 描述 */
  Description: string;
  /** 读写类型 */
  ReadWrite: ReadWriteTypeEnum;
}
